<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Webframework</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Webframework"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Webframework rootpage-Webframework skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Webframework</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Ein <b>Webframework</b> (auch <i>Web Application Framework</i>, kurz: <i>WAF</i> oder <i>WF</i>) ist ein <a href="Framework" title="Framework">Framework</a>, das für die Entwicklung von <a href="Dynamische_Webseite" class="mw-redirect" title="Dynamische Webseite">dynamischen Webseiten</a>, <a href="Webanwendung" title="Webanwendung">Webanwendungen</a> oder <a href="Webservice" title="Webservice">Webservices</a> ausgelegt ist.
Sich wiederholende Tätigkeiten werden vereinfacht und die Wiederverwendung von Code und die Selbstdokumentation der Software-Entwicklung gefördert. Durch Konzepte wie <a href="Don%E2%80%99t_repeat_yourself" title="Don’t repeat yourself">Don’t repeat yourself</a>, <a href="KISS-Prinzip" title="KISS-Prinzip">KISS</a> oder <a href="Konvention_vor_Konfiguration" title="Konvention vor Konfiguration">Konvention vor Konfiguration</a> werden einfache, klare und mit wenig Aufwand wartbare Strukturen angeboten.
</p><p>Durch vordefinierte und vorgefertigte Klassen werden häufig gebrauchte Funktionen wie Mailversand<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>, sichere <a href="Authentifizierung" title="Authentifizierung">Authentifizierung und Authentisierung</a><sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>, <a href="Sicherheit_von_Webanwendungen" title="Sicherheit von Webanwendungen">Sicherheitsfunktionen</a>, <a href="Lokalisierung_(Softwareentwicklung)" title="Lokalisierung (Softwareentwicklung)">Lokalisierung</a>, Performance (z. B. <a href="HTTP_Caching" title="HTTP Caching">HTTP Caching</a>) oder grundlegende Funktionen für <a href="Webformular" title="Webformular">Webformulare</a> vom Framework mitgebracht.
</p><p>Webframeworks sind darauf ausgelegt, sehr schnell lauffähige Webanwendungen zu erstellen.
Dazu bieten heutige Webframeworks einen Datenbankzugriff, <a href="Vorlage_(Datenverarbeitung)" title="Vorlage (Datenverarbeitung)">Templating</a>-Mechanismen, eine saubere Trennung von Präsentation und Code durch Verwendung des <a href="Model_View_Controller" title="Model View Controller">Model View Controllers</a> oder <a href="Model_View_Presenter" title="Model View Presenter">Model View Presenters</a> als <a href="Architekturmuster" title="Architekturmuster">Architekturmuster</a>, sowie oft auch Möglichkeiten zum <a href="Rapid_Prototyping" title="Rapid Prototyping">Rapid Prototyping</a> durch <a href="#Scaffolding">Scaffolding</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Datenbankzugriff">Datenbankzugriff</h2></div>
<p>Die meisten Webframeworks bieten einen <a href="Datenbank" title="Datenbank">Datenbankzugriff</a>, meist über eine <a href="Objektrelationale_Abbildung" title="Objektrelationale Abbildung">objektrelationale Abbildung</a>, an. Für die einfache Handhabung gibt es häufig einen <a href="Objektrelationale_Abbildung" title="Objektrelationale Abbildung">objektrelationalen Mapper</a>, der sich um die <a href="Persistenz_(Informatik)" title="Persistenz (Informatik)">Persistierung</a> kümmert und fertige Klassen zur Verwendung anbietet. Dies kann explizit, wie z. B. in <a href="Django_(Framework)" title="Django (Framework)">Django</a>, geschehen oder aber auch implizit über <a href="Reflexion_(Programmierung)" title="Reflexion (Programmierung)">Introspektion</a>, wie z. B. in <a href="Ruby_on_Rails" title="Ruby on Rails">Ruby on Rails</a>.
</p><p>Einige Webframeworks enthalten eine <a href="Datenbankabstraktionsschicht" title="Datenbankabstraktionsschicht">Datenbankabstraktionsschicht</a> als eigenständiges Framework, wie z. B. <a href="Doctrine_(PHP)" title="Doctrine (PHP)">Doctrine</a> in <a href="Symfony" title="Symfony">Symfony</a>.
</p><p>Eine bestehende und bereits mit Daten beschriebene <a href="Datenbank" title="Datenbank">Datenbank</a> kann nicht, wie die Software selbst, einfach ersetzt werden.
Viele Webframeworks bieten <b>migrations</b>, Unterprogramme, welche die <a href="Datenbankstruktur" class="mw-redirect" title="Datenbankstruktur">Datenbankstruktur</a> anpasst, mit an, um nötige Datenbankänderungen automatisch auszuführen.
</p><p>Der Datenbankzugriff aus dem GUI heraus wird in der Informatik generell kontrovers betrachtet. Die oft anzutreffende strikte <a href="Schichtenarchitektur" title="Schichtenarchitektur">Schichtenarchitektur</a> mit drei Schichten verbietet beispielsweise generell den Zugriff von der Präsentationsschicht auf die Persistenzschicht. Auch das oft bei Webframeworks eingesetzte MVC Pattern erlaubt keinen Datenbankzugriff aus dem GUI heraus (sondern nur über das Model).
</p>
<div class="mw-heading mw-heading2"><h2 id="Templatesysteme">Templatesysteme</h2></div>
<p>Ein Webframework bietet auch meist die Möglichkeit, die Anzeige über eine <a href="Template-Engine" title="Template-Engine">Template-Engine</a> zu steuern. Dazu werden auf Abruf <a href="Hypertext_Markup_Language" title="Hypertext Markup Language">HTML</a>-Seiten generiert, die mit den dynamischen Inhalten gefüllt werden. An dieser Stelle kann auch meist zwischen statischen und dynamischen Inhalten getrennt werden, so dass etwa ein Designer das Aussehen festlegt, indem er eine Vorlage entwirft, die der Anwendungs-Entwickler dann mit Daten befüllt. Die <a href="Syntax" title="Syntax">Syntax</a> der Template-Sprachen ist meist an HTML angelehnt oder erweitert dieses nur geringfügig.
</p>
<div class="mw-heading mw-heading2"><h2 id="Scaffolding">Scaffolding</h2></div>
<p>Scaffolding (auf Deutsch Gerüstbau) unterstützt den Entwickler durch die Generierung von <a href="CRUD" title="CRUD">CRUD</a>-Pages (Create-Read-Update-Delete) bei der Entwicklung und im <a href="Prototyping_(Softwareentwicklung)" title="Prototyping (Softwareentwicklung)">Prototyping</a>. Dadurch ist es möglich, direkt aus dem Entwurf eines Modells etwa ein Web-Interface anzubieten, über das Daten sofort in die Datenbank eingegeben und verwaltet werden können. Auf diese Weise kann bereits mit Beispieldaten entwickelt und getestet werden. Auch die Verwaltungs-Sichten (Admin interface) einer <a href="Webanwendung" title="Webanwendung">Webanwendung</a> können teils mit Scaffolding generiert werden, da diese häufig nur grundlegende Bedienelemente benötigen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Routing">Routing</h2></div>
<p>Die Definition der <a href="Uniform_Resource_Locator" title="Uniform Resource Locator">URLs</a> der Webanwendung kann meist, ähnlich der <a href=".htaccess" title=".htaccess">.htaccess</a>, im Webframework konfiguriert werden. Es können <a href="Clean_URL" title="Clean URL">Clean URLs</a>, <a href="Weiterleitung" title="Weiterleitung">Weiterleitungen</a> und <a href="HTTP-Statuscode" title="HTTP-Statuscode">Fehlermeldungen</a> festgelegt werden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Liste_von_Webframeworks" title="Liste von Webframeworks">Liste von Webframeworks</a></li>
<li><a href="CSS-Framework" title="CSS-Framework">CSS-Framework</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://guides.rubyonrails.org/action_mailer_basics.html">Action Mailer Basics</a></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://docs.djangoproject.com/en/dev/topics/auth/">User authentication in Django</a></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2022-07-17" href="https://de.wikipedia.org/wiki/?title=Webframework&oldid=224573426">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>